export const reg = /^1[3-9][0-9]{9}$/;

/* 手机号 必填*/
export const checkPhone = (_rule: any, value: string) => {
  if (!value) {
    return new Error('请输入手机号');
  } else if (!reg.test(value)) {
    return new Error('请输入正确手机号');
  }
  return true;
};

/* 手机号 选填*/
export const checkPhoneOP = (_rule: any, value: string) => {
  if (!value) {
    return true;
  } else if (!reg.test(value)) {
    return new Error('请输入正确手机号');
  }
  return true;
};

// 密码
const regExp = /^[A-Za-z0-9~!@#$%^&*()_+=\-.,]{8,32}$/;

export const checkPass = (_rule: any, value: string) => {
  if (!value) {
    return new Error('请输入密码');
  } else if (!regExp.test(value)) {
    return new Error('密码长度8-32，前后无空格，需包含字母、数字及特殊字符两种或以上组合');
  }
  return true;
};

/** 手机号
 * @param {string} mobile
 * @returns {Boolean}
 */
export function validMobile(mobile) {
  return reg.test(mobile);
}

export function validCardNo(card) {
  // 身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X
  const reg = /(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  return reg.test(card);
}

/** 邮箱
 * @param {string} email
 * @returns {Boolean}
 */
export function validEmail(email) {
  const reg =
    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return reg.test(email);
}

/* 邮箱*/
export const checkEmail = (_rule, value) => {
  if (!value) {
    return new Error('请输入邮箱');
  } else if (!validEmail(value)) {
    return new Error('请输入正确的邮箱');
  }
  return true;
};
export const checkEmailOP = (_rule, value) => {
  if (!value) {
    return true;
  } else if (!validEmail(value)) {
    return new Error('请输入正确的邮箱');
  }
  return true;
};

/* 身份证号*/
export const checkIdcard = (_rule, value) => {
  if (!value) {
    return new Error('请输入身份证号');
  } else if (value.length != 18) {
    return new Error('请输入18位身份证号');
  }
  return true;
};
export const checkIdcardOP = (_rule, value) => {
  if (!value) {
    return true;
  } else if (value.length != 18) {
    return new Error('请输入18位身份证号');
  }
  return true;
};
